iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0

哈囉!大家好,今天我們要來學習如何拆解並認識 Go 的程式結構。

還記得我們在 Day 2 的時候,有介紹到 Go module 嗎?如果忘記了可以再回去看一下~
疑?那這個跟 Module 有什麼關係呢?

當然有!!! 在 Go 裡面,一個 module 可以有很多個 package(套件),也就是說今天我們建立了一個專案,那這個專案名稱就是我們的 module,而專案底下的其他資料夾就會是 package。
👉 module 就像一本書,裡面有很多章節(packages)。

什麼意思呢?🤔

一開始建立 Go 專案的時候,是不是會輸入指令 go mod init app (app 是我命名專案資料夾的名稱),輸入完之後,系統就自動生成了一個 go.mod 檔案。而這個檔案裡面的內容就寫著:

module app

go 1.25.0

有發現嗎?剛剛建立的專案名稱,就是 module 名稱。
為什麼會特別講到這部分? 因為它是 import 路徑(package)的開頭,非常重要。
那要怎麼建立 package 呢?

通常會建立在與 main.go 同層的資料夾裡面,我們看以下的圖示:

app/                   ← module
│── go.mod
│── main.go            
└── example/           ← package example
    └── example1.go
    └── example2.go

Package 底下可以有多個 .go 檔案,但一個 .go 檔案裡面只能宣告一個 package,所以以上面的檔案結構來說,example1.goexample2.go 都是屬於 example package,可以在 main.go 檔案裡一起 import "app/example" 使用:

// example1.go 和 example2.go 的 package
package example

👉 所以 package 的單位是 資料夾,不是單個 .go 檔案。

在 package 的命名,Go 有一些慣例:

  1. 小寫單字,避免底線和大寫
  2. 使用單數形式
  3. 簡短有意義

另一個要注意的是,我們寫在 package 裡面的 function 名稱,要大寫字母開頭,才能夠匯出被引用!

範例:

package example

// 大寫 Add 可供其他 package 使用
func Add(a, b int) int {
    return a + b
}

// 小寫 sub 只能在 example 內使用
func sub(a, b int) int {
    return a - b
}

了解 module 和 package 之間的關係之後,就來實作一個簡單的範例吧!

先建立一個專案,然後新增一個 calc 資料夾(package)和 calc.go 檔案:

app/
│── go.mod
│── main.go
└── calc/
    └── calc.go

calc.go 檔案輸入以下內容:

package calc

func Add(a, b int) int{
	return a + b
}

main.go 檔案裡面輸入以下內容:

package main
import (           
	"fmt"
	"app/calc"   // 匯入剛剛建立的 calc package
)

func main() {
	var a, b int
	fmt.Print("請輸入第一個數字")
	fmt.Scanln(&a)
	fmt.Print("請輸入第二個數字")
	fmt.Scanln(&b)
	
	fmt.Println("總和:", calc.Add(a, b))  // 呼叫 calc package 裡面的 Add 函式
}

然後執行 main.go 程式,就會得到輸出結果:
https://ithelp.ithome.com.tw/upload/images/20250919/20178223lmuPmqsPn4.png

這樣就完成了一個簡單的範例了!

雖然我們用了一個很簡單的範例來介紹 module 和 package 之間的操作,但實際上我們在引用這些 package 的時候還是要特別留意,必須思考一下你想要怎麼規劃和拆解你的專案程式,哪些函式要放在同一個 package;哪一些 function 需要匯出使用;哪一些不用,這些都是要先想好的唷!

好的,以上就是這個章節 module 和 package 的介紹~


上一篇
Day4 - Go 基本語法介紹-2:陣列、函式、結構與指標
系列文
Go,一起成為全端吧!—— 給前端工程師的 Golang 後端學習筆記5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言